package c05面向对象;

public class 在外部类以外使用静态内部类 {
	public static void main(String[] args) {
		//在外部类外面访问内部类的完整类名都是OuterClass.InnerClass，即StaticOut.StaticIn：
		StaticOut.StaticIn in;
		//通过new来调用内部类构造器创建静态内部类实例
		in = new StaticOut.StaticIn("静态内部类实例化");//不像非静态内部类，通常应该带上外部类前缀！
//		in = new StaticIn();//如果没有 import c05面向对象.StaticOut.StaticIn;，那么这里编译出错！

		//或者简化如下：
		StaticOut.StaticIn in2 = new StaticOut.StaticIn("静态内部类实例化2");

		SubSOI sub = new SubSOI("静态内部类子类实例化");
	}
}

class StaticOut {
	//定义一个静态内部类，不使用访问控制符，
	//即同一个包中其他类可访问该内部类
	static class StaticIn {
		public StaticIn(String msg) {
			System.err.println(msg);
		}
	}

	class SubSI extends StaticIn {

		public SubSI(String msg) {
			super(msg);
		}
	}
}

//在外部类外面可以直接继承静态内部类！
class SubSOI extends StaticOut.StaticIn {

	public SubSOI(String msg) {
		super(msg);
	}
}

